<?php 
/**
* @version		$Id: oci.adapter.php 547 2011-07-30 08:12:50Z datahell $
* @package		Elxis
* @subpackage	Database
* @copyright	Copyright (c) 2006-2012 Elxis CMS (http://www.elxis.org). All rights reserved.
* @license		Elxis Public License ( http://www.elxis.org/elxis-public-license.html )
* @author		Elxis Team ( http://www.elxis.org )
* @description 	Elxis CMS is free software. Read the license for copyright notices and details
*/

defined('_ELXIS_') or die ('Direct access to this location is not allowed.');


class elxisOciAdapter extends elxisDbAdapter {


	/*************************************/
	/* CALL THE PARENT CLASS CONSTRUCTOR */
	/*************************************/
	public function __construct($pdo=null) {
		parent::__construct($pdo);
	}


	/*************************************/
	/* ADD LIMIT/OFFSET TO SQL STATEMENT */
	/*************************************/
	public function addLimit($sql, $offset=-1, $limit=-1) {
		if ($limit < 1) { return $sql; }
		if ($offset < 0) { $offset = 0; }
	    $limit_sql = "SELECT z2.*
	        FROM (
	            SELECT ROWNUM AS elxis_db_rownum, z1.*
	            FROM (".$sql.") z1
	        ) z2
	        WHERE z2.elxis_db_rownum BETWEEN ".($offset+1)." AND ".($offset+$limit);
	    return $limit_sql;
	}


	/*****************************************************************/
	/* GET THE LAST ID GENERATED BY AN IDENTITY/AUTOINCREMENT COLUMN */
	/*****************************************************************/
    public function lastInsertId($tableName = null, $primaryKey = null) {
		if ($tableName === null) { return null; }
		$sequenceName = $tableName;
        if ($primaryKey) {
			$sequenceName .= '_'.$this->foldCase($primaryKey);
        }
		$sequenceName .= '_'.$this->foldCase('seq');
        return $this->lastSequenceId($sequenceName);
    }


	/*********************************************************/
	/* GET THE MOST RECENT VALUE FROM THE SPECIFIED SEQUENCE */
	/*********************************************************/ 
    public function lastSequenceId($sequenceName) {
		$stmt = $this->pdo->prepare('SELECT '.$sequenceName.'.CURRVAL FROM dual');
		$stmt->execute();
		return $stmt->fetchColumn(0);
    }


    /****************************/
	/* LIST ALL DATABASE TABLES */
	/****************************/
    public function listTables() {
    	$stmt = $this->pdo->prepare('SELECT table_name FROM all_tables');
    	$stmt->execute();
    	return $stmt->fetchCol();
    }


	/***********************************/
	/* BACKUP DATABASE (NOT SUPPORTED) */
	/***********************************/
	public function backup($params) {
		return -1;
	}

}

?>